package com.liug.droidsmall2.utils;

import android.content.Context;
import android.graphics.Paint;
import android.view.View;

    /**
     * Created by littlejie on 2017/2/22.
     */

    public class MiscUtil {

        /**
         * 测量 View
         *
         * @param measureSpec
         * @param defaultSize View 的默认大小
         * @return
         */
        public static int measure(int measureSpec, int defaultSize) {
            int result = defaultSize;
            int specMode = View.MeasureSpec.getMode(measureSpec);
            int specSize = View.MeasureSpec.getSize(measureSpec);

            if (specMode == View.MeasureSpec.EXACTLY) {
                result = specSize;
            } else if (specMode == View.MeasureSpec.AT_MOST) {
                result = Math.min(result, specSize);
            }
            return result;
        }

        /**
         * dip 转换成px
         *
         * @param dip
         * @return
         */
        public static int dipToPx(Context context, float dip) {
            float density = context.getResources().getDisplayMetrics().density;
            return (int) (dip * density + 0.5f * (dip >= 0 ? 1 : -1));
        }

        /**
         * 获取数值精度格式化字符串
         *
         * @param precision
         * @return
         */
        public static String getPrecisionFormat(int precision) {
            return "%." + precision + "f";
        }

        /**
         * 反转数组
         *
         * @param arrays
         * @param <T>
         * @return
         */
        public static <T> T[] reverse(T[] arrays) {
            if (arrays == null) {
                return null;
            }
            int length = arrays.length;
            for (int i = 0; i < length / 2; i++) {
                T t = arrays[i];
                arrays[i] = arrays[length - i - 1];
                arrays[length - i - 1] = t;
            }
            return arrays;
        }

        /**
         * 测量文字高度
         *
         * @param paint
         * @return
         */
        public static float measureTextHeight(Paint paint) {
            Paint.FontMetrics fontMetrics = paint.getFontMetrics();
            return (Math.abs(fontMetrics.ascent) - fontMetrics.descent);
        }
    }